import tornado.web
import asyncio
import random
from core.base_tornado_request_handler import BaseTornadoRequestHandler

class BakuHandler(BaseTornadoRequestHandler):
    def initialize(self):
        # 从 Application 中获取共享的状态
        super().initialize()
        # self.task_list = self.application.settings.get('task_list', [])

    async def get(self, action):
        if action == "start":
            await self.start_baku()
        elif action == "stop":
            await self.stop_baku()
        self.write(f"baku, {action}")

    def say(self):
        """ 定时任务回调函数 """
        print("say")

    async def focus_wow(self):
        """ 定时任务 focus_wow """
        while True:
            print("focus_wow")
            try:
                await asyncio.sleep(random.uniform(5, 10))  # 任务可以被取消
            except asyncio.CancelledError:
                print("focus_wow 任务被取消")
                break  # 任务被取消后退出循环

    async def press_8(self):
        """ 定时任务 press_8 """
        while True:
            print("press_8")
            try:
                await asyncio.sleep(random.uniform(1.1, 2.4))  # 任务可以被取消
            except asyncio.CancelledError:
                print("press_8 任务被取消")
                break  # 任务被取消后退出循环

    async def press_9(self):
        """ 定时任务 press_9 """
        while True:
            print("press_9")
            try:
                await asyncio.sleep(random.uniform(0.5, 1.5))  # 任务可以被取消
            except asyncio.CancelledError:
                print("press_9 任务被取消")
                break  # 任务被取消后退出循环

    async def start_baku(self):
        """ 启动所有定时任务 """
        if len(self.task_list):
            print(f"任务列表非空，准备停止所有任务。当前任务数：{len(self.task_list)}")
            await self.stop_all_task()  # 停止之前所有任务
        print(f"开始创建任务，当前任务列表：{self.task_list}")
        
        task_8 = asyncio.create_task(self.press_8())  # 创建任务
        self.task_list.append(task_8)  # 添加任务到列表
        
        task_9 = asyncio.create_task(self.press_9())  # 创建任务
        self.task_list.append(task_9)  # 添加任务到列表
        
        focus_task = asyncio.create_task(self.focus_wow())  # 创建任务
        self.task_list.append(focus_task)  # 添加任务到列表
        
        print(f"任务列表：{self.task_list}")  # 打印任务列表，确认任务已添加
        self.write("定时器已启动")  # 返回客户端响应

    async def stop_baku(self):
        """ 停止定时器 """
        await self.stop_all_task()  # 停止所有任务
        self.write("定时器已停止")  # 返回客户端响应
        